|
=========================================
Tutorial - Display de HP numérico
by Cuauthemoc
[cuauthemoc@bol.com.br]
based on design of The Naughty Crusty
[thenaughtycrusty@terra.com.br]
========================================= |
|
| E aí, lôko? Beleza?? Este é meu primeiro
tuto, coisa que eu nem imaginava em fazer! Mas taí,.. Neste tutorial eu
vou mostrar como mostrar o HP ou MP na tela em forma de número. Aquele
tuto no Crusty de Mostrar a Barra de HP me inspirou a fazer este, e
agradeço a ele por isso: Naughty Crusty!! Valeu Kara!!!! Grande
tutorial! Ah! E valeu pelo layout... ele deveria ser usado por todo
mundo que faz tutos, pois é ótimo pra isso... |
|
|
|
| :: Primeiro Passo - Criando os Números :: |
|
| Para esse evento serão necessárias
imagens! Você pode criar suas próprias imagens se preferir, mas se for
preguiçoso, como muitos costumam dizer; eu anexei as imagens
necessárias. Assim basta que você transporte-as para seu devido lugar. |
|
 |
 |
| Para cada número foi
criada uma imagem, e foi criada ainda uma imagem extra,
que será usada como separador, que
será útil mais à frente... Você pode copiá-las para
a pasta 'Pictures' dentro do seu projeto, ou dentro do
RPT. Tanto faz... Vamos agora ao 2º Passo! |
|
 |
 |
 |
 |
 |
 |
 |
 |
 |
|
|
|
|
|
| :: Segundo Passo - Programando :: |
|
| Se você já jogou Vagrant Story (RPG da
antiga Squaresoft e atual Square-Enix para PSX) deve ter visto que a
durante a maior parte do jogo o HP e MP do herói Ashley Riot são
exibidos na forma numérica e como barra de energia. Da mesma forma, se
você tem aí o tuto do Crusty 'HP Bar' poderá juntar com esse tuto e
fazer o mesmo. Ficaria muito lôko... |
|
| Agora abra o Database e crie um Common
Event (ou Evento Comum para o RM2K BR) chamado
(SeuHerói)HP e deixe o Event Start Condition
(Condição de Início) em Parallel Process (Processo Paralelo).
Se você quiser (eu recomendo que queira :P), pode criar um Switch
Condicional de Disparo (ao lado da Condição de Início), chamado 'HPDisplayOnOff',
para momentos em que você queira esconder o HP do truta... |
|
| Agora na Lista de Comandos
, iremos inserir a 'massa' do código. Mas primeiro vamos entender como os
cálculos serão feitos, e qual o objetivo desses cálculos. |
|
Hero HP = 8473
Milhares -> 8000
Centenas -> 400
Dezenas -> 70
Unidades -> 3 |
| Como você pode ver no
exemplo ao lado, o numeral é dividido em 4 casas: dos
Milhares, das Centenas, das Dezenas e Unidades, certo? O
objetivo dos cálculos é conseguir esses números. 'Mas
como??' Ah... Que bom que você perguntou... |
|
|
|
Para achar esses números precisaremos de
10 variáveis, e não pense que é muito, pois poderia ser mais... Você
pode criar todas de uma vez na lista de variáveis para adiantar o
processo. Elas são: HeroA-HP, HPDiv1
, HPDiv2, HPDiv3
, HPMlt1, HPMlt2
, CasaMil, CasaCen
, CasaDez e CasaUni.
Para começar vá em Mudar Variável e deixe
HeroA-HP>Setar>Hero(Seu Herói)>HP. Aqui definimos a variável
HeroA-HP equivalente ao HP do seu Herói. Agora vamos copiar o seu valor
para a variável HPDiv1, que ficará assim: Mudar Variável
HPDiv1>Setar>Variável>HeroA-HP. Isso se deve ao fato que que a variável
HPDiv1 será usada para a 1ª divisão. Agora vá em Mudar Variável
e deixei HPDiv1>Operador'/'>Setar>1000. Nós dividimos a var. HPDiv1
por 1000, agora vamos multiplicá-la por 1000 para achar o primeiro
valor: CasaMil. Veja: Mudar Variável
CasaMil>Setar>Variável>HPDiv1 e então Mudar Variável
CasaMil>Operador'*'>Setar>1000. OK... primeira variável encontrada.
Bom, a primeira var. foi fácil de achar. Agora serão necessários
alguns cálculos a mais para as outras. Chega de conversa e continuemos:
Mudar Variável HPDiv2>Setar>Variável>HeroA-HP. E:
Mudar Variável HPDiv2>Operador'/'>Setar>100. Tem mais:
Mudar Variável HPMlt1>Setar>Variável>HPDiv2. E essa:
Mudar Variável HPMlt1>Operador'*'>Setar>100. Ufa... O processo foi
quase igual ao anterior, ou seja, pegamos a var. HeroA-HP, copiamos seu
valor para outra var., dividimos por 100 e multiplicamos novamente por
100, mas o seu resultado não nos deu o 2º. valor. Precisamos de mais
contas!!!
Prenda a respiração que lá vai mais:
Mudar Variável HeroA-HP>Setar>Variável>HPDiv3. Depois vem:
Mudar variável HPDiv3>Operador'/'>Setar>10. Em seguida:
Mudar variável HPMlt2>Setar>Variável>HPDiv3. Enfim:
Mudar Variável HPMlt2>Operador'*'>Setar>10.
De novo o mesmo
processo: copiar, dividir e depois multiplicar por 10. Ainda não temos
o 2º valor. Mas agora chega! Estes serão os últimos cálculos, nós
finalmente teremos os 3 valores restantes na mão (não exatamente na
mão...).
Here we go!! Um:
Mudar variável CasaCen>Setar>Variável>HPMlt1. Dois:
Mudar Variável CasaCen>Operador'-'>Variável>CasaMil. Valor 2 encontrado. Mantenha o pique:
Mudar Variável CasaDez>Setar>Variável>HPMlt2. E:
Mudar Variável CasaDez>Operador'-'>Variável>HPMlt1. Valor 3 encontrado. E:
Mudar Variável CasaUni>Setar>Variável>HeroA-HP. Enfim:
Mudar Variável CasaUni>Operador'-'>Variável>HPMlt2.
Há! Valor 4 encontrado! Para você entender os cálculos, veja o
exemplo abaixo: |
|
HeroA-HP = (Seu herói)HP
HPDiv1 = HeroA-HP
HPDiv1 / 1000
CasaMil = HPDiv1
CasaMil * 1000
HPDiv2 = HeroA-HP
HPDiv2 / 100
HPMlt1 = HPDiv2
HPMlt1 * 100
HPDiv3 = HeroA-HP
HPDiv3 / 10
HPMlt2 = HPDiv3
HPMlt2 * 10
CasaCen = HPMlt1
CasaCen - CasaMil
CasaDez = HPMlt2
CasaDez - HPMlt1
CasaUni = HeroA-HP
CasaUni - HPMlt |
0 = 8473
0 = 8473
8473 / 1000 = 8
0 = 8
8 * 1000 = 8000
0 = 8473
8473 / 100 = 84
0 = 84
84 * 100 = 8400
0 = 8473
8473 / 10 = 847
0 = 847
847 * 10 = 8470
0 = 8400
8400 - 8000 = 400
0 = 8470
8470 - 8400 = 70
0 = 8473
8473 - 8470 = 3 |
Como você pode ver, aqui está o
código do cálculo, e ao lado um exemplo. Nesse exemplo foi
suposto que o Herói tenha o HP atual igual a 8473, e a partir
desse valor, todos os outros foram encontrados. |
|
|
| Essa foi a parte fácil. O trampo vem
agora... |
|
Agora que nó já temos todos os valores
necessários, precisaremos de alguns Fork Conditions, alguns Show e
Erase Picture e... Catapimba! Se você tá cansado, vá dormir um pouco,
por que essa parte realmente... É MUUUIITO CHATA!!
Agora chega de preguiça e vamofazêessinegóciu:
Pra começar deixa eu explicar o processo. Serão necessários 40 Fork
Conditions, 10 para cada variável, divididos em grupos de 4. Sacou? É
assim: |
|
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 0
<>Deletar Picture: 1
<>
:FIM Caso
<>IF - THEN:Var[####:HeroA-HP] 1000 - menor que
<>Deletar Picture: 2
<>
Exceção - ELSE
<>Mostrar Picture: 2, (número0), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:HeroA-HP] 100 - menor que
<>Deletar Picture: 3
<>
exceção - ELSE
<>Mostrar Picture: 3, (número0), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 0
<>Mostrar Picture: 4, (número0), (56,16)
<>
:FIM Caso
<>Nota: ------------------------------------------- |
Use comentários para separar os
grupos. Assim você não se perde em meio ao código.
Fork para CasaMil. Se CasaMil for igual 0:
Remove a figura 1 que fica na pos. 32x16.
Fim do caso.
Fork para CasaCen usando a var. HeroA-HP. Se o HP do Herói for
menor que 1000:
Remove a figura 2 que fica na pos. 40x16.
Mas se o HP for igual ou maior que 1000:
Mostra a figura 2 que fica na pos. 40x16
Fim do caso.
Fork para CasaDez usando a var. HeroA-HP. Se o HP do Herói for
menor que 100:
Remove a figura 3 que fica na pos. 48x16
Mas se o HP for igual ou maior que 100:
Mostra a figura 3 que fica na pos. 48x16
Fim do caso.
Fork para CasaUni. Se a var. CasaUni for igual a 0:
Mostra a figura 4 que fica na pos. 56x16
Fim do caso.
Mas uma vez os comentários para separar os grupos. Sempre use
comentários... |
|
|
| O grupo de forks acima é um grupo
especial em relação aos outros, pois ele verifica quando pôr ou
remover o zero nos números. Evita que o Display indique, por exemplo, 0945
ao invés de 945. Para TODOS os grupos de forks segue uma regra básica,
e você deve ter cuidado para não confundir ou errar. Como você pode
ver acima na seqüência de forks, o primeiro fork é relacionado à
casa dos milhares e a figura 1. O segundo é da casa das centenas e da
figura 2 (Não esqueça de ajustar as coordenadas de posição). O
terceiro é da casa das dezenas e da figura 3; e finalmente o quarto é
lugar onde se dorme... hã... quer dizer, o quarto é da casa das
unidades e da figura 4. Daí coloca-se um comentário, como visto acima
e começa tudo de novo. Bom, não deve ser difícil, pois ninguém aqui
é burro... |
|
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 1000
<>Mostrar Picture: 1(número1), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 100
<>Mostrar Picture: 2, (número1), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 10
<>Mostrar Picture: 3, (número1), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 1
<>Mostrar Picture: 4, (número1), (56,16)
<>
:FIM Caso
<>Nota: ------------------------------------------- |
Comentário...
1º Fork, para CasaMil. Se CasaMil for igual a 1000:
Mostra a figura 1, de nome '(número1)' na posição 32x16.
...
Fim do Caso.
2º Fork, para CasaCen. Se CasaCen for igual a 100:
Mostra a figura 2, de nome '(número1)' na posição 40x16.
...
Fim do Caso.
3º Fork, para CasaDez. Se CasaDez for igual a 10:
Mostra a figura 3, de nome '(número1)' na posição 48x16.
...
Fim do Caso.
4º Fork, para CasaUni. Se CasaUni for igual a 1:
Mostra a figura 4, de nome '(número1)' na posição 56x16.
...
Fim do Caso.
Comentário para separar o grupo... |
|
|
| Este grupo de forks é uma exemplo
perfeito de como todos os demais deverão ser feitos. Repare nos
destaques coloridos as partes que requerem mais atenção. Em amarelo está a
parte mais fácil de se ajustar, pois basta trocar os valores (em
CasaMil,1000 por 2000, depois 3000...; em CasaCen, 100 por 200, depois
300...). Da mesma forma que o destaque verde: muda-se o número de um
grupo para outro. O número da figura (laranja) e a posição da imagem
requerem mais atenção... |
|
|
|
| :: Finalizando - O Cógigo:: |
|
- Nome: (SeuHerói)HP Display
- Condição de Início: Processo Paralelo
- Switch Condicional de Disparo: HPDisplayOnOff
- Comandos:
<>Variável: [####:HeroHP]Set
, SeuHéroi HP
<>Variável: [####:HPDiv1]Set , Var [####:HeroHP]val.
<>Variável: [####:HPDiv1]/ , 1000
<>Variável: [####:CasaMil]Set , Var [####:HPDiv1]val.
<>Variável: [####:CasaMil]* , 1000
<>Variável: [####:HPDiv2]Set , Var [####:HeroHP]val.
<>Variável: [####:HPDiv2]/ , 100
<>Variável: [####:HPMlt1]Set , Var [####:HPDiv2]val.
<>Variável: [####:HPMlt1]* , 100
<>Variável: [####:HPDiv3]Set , Var [####:HeroHP]val.
<>Variável: [####:HPDiv3]/ , 10
<>Variável: [####:HPMlt2]Set , Var [####:HPDiv3]val.
<>Variável: [####:HPMlt2]* , 10
<>Variável: [####:CasaCen]Set , Var [####:HPMlt1]val.
<>Variável: [####:CasaCen]- , Var [####:CasaMil]val.
<>Variável: [####:CasaDez]Set, Var [####:HPMlt2]val.
<>Variável: [####:CasaDez]- , Var [####:HPMlt1]val.
<>Variável: [####:CasaUni]Set , Var [####:HeroHP]val.
<>Variável: [####:CasaUni]- , Var [####:HPMlt2]val.
Nota:
----------------------------------------------------------------------- |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 0
<>Deletar Picture: 1
<>
:FIM Caso
<>IF - THEN:Var[####:HeroA-HP] 1000 - menor que
<>Deletar Picture: 2
<>
Exceção - ELSE
<>Mostrar Picture: 2, (número0), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:HeroA-HP] 100 - menor que
<>Deletar Picture: 3
<>
exceção - ELSE
<>Mostrar Picture: 3, (número0), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 0
<>Mostrar Picture: 4, (número0), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 1000
<>Mostrar Picture: 1, (número1), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 100
<>Mostrar Picture: 2, (número1), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 10
<>Mostrar Picture: 3, (número1), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 1
<>Mostrar Picture: 4, (número1), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 2000
<>Mostrar Picture: 1, (número2), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 200
<>Mostrar Picture: 2, (número2), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 20
<>Mostrar Picture: 3, (número2), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 2
<>Mostrar Picture: 4, (número2), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 3000
<>Mostrar Picture: 1, (número3), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 300
<>Mostrar Picture: 2, (número3), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 30
<>Mostrar Picture: 3, (número3), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 3
<>Mostrar Picture: 4, (número3), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 4000
<>Mostrar Picture: 1, (número4), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 400
<>Mostrar Picture: 2, (número4), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 40
<>Mostrar Picture: 3, (número4), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 4
<>Mostrar Picture: 4, (número4), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 5000
<>Mostrar Picture: 1, (número5), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 500
<>Mostrar Picture: 2, (número5), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 50
<>Mostrar Picture: 3, (número5), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 5
<>Mostrar Picture: 4, (número5), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 6000
<>Mostrar Picture: 1, (número6), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 600
<>Mostrar Picture: 2, (número6), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 60
<>Mostrar Picture: 3, (número6), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 6
<>Mostrar Picture: 4, (número6), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 7000
<>Mostrar Picture: 1, (número7), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 700
<>Mostrar Picture: 2, (número7), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 70
<>Mostrar Picture: 3, (número7), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 7
<>Mostrar Picture: 4, (número7), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 8000
<>Mostrar Picture: 1, (número8), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 800
<>Mostrar Picture: 2, (número8), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 80
<>Mostrar Picture: 3, (número8), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 8
<>Mostrar Picture: 4, (número8), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 9000
<>Mostrar Picture: 1, (número9), (32,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 900
<>Mostrar Picture: 2, (número9), (40,16)
<>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 90
<>Mostrar Picture: 3, (número9), (48,16)
<>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 9
<>Mostrar Picture: 4, (número9), (56,16)
<>
:FIM Caso |
<>Nota: -------------------------------------------
Esperar: 0.6sg
<> |
|
|
| No fim do código foi adicionado um
comando de espera, para que não haja travamento no movimento do chara
no mapa. Logicamente vai causar uma breve demora na atualização do HP
no Display, mas não é nada. Agora que você entendeu o processo por
completo, poderá fazer outro evento desse, só que com o HP máximo do
seu Herói. Mas pra isso você vai precisar de outras 10 variáveis. Eu
bolei os nomes delas pra agilizar o processo: HeroMaxHP, MaxHPDiv1,
MaxHPDiv2, MaxHPDiv3, MaxHPMlt1, MaxHPMlt2, MaxCasaMil, MaxCasaCen,
MaxCasaDez e MaxCasaUni. Mas tome cuidado com a posição das
imagens. Veja: |
|
| Picture Nº: |
1 |
2 |
3 |
4 |
9 |
5 |
6 |
7 |
8 |
| Pos. X |
32 |
40 |
48 |
56 |
64 |
72 |
80 |
88 |
96 |
|
|
| A Picture no. 9 corresponde ao separador
dos dois Displays. Você ajusta as coordenadas como preferir,
entretanto, caso faça suas próprias figuras, evite faze-las maiores
que 16x16 píxel, pois elas ocuparão um espaço considerável na tela.
A partir daí entenda que um Display para cada personagem seria
desnecessário. Ao invés disso você poderia usar uma HPBar (Tuto do
Crusty) para cada personagem, ou então um HP Display com a HPBar.
Ficaria melhor, mas decisão final é sua. |
|
|
|
 |
|
Qualquer dúvida, sugestão ou
colaboração, mande-me um e-mail em cuauthemoc@bol.com.br
... Este Tutorial é de livre distribuição, usem como quiser,
desde que seja mantida a sua integridade... Se for usá-lo no
seu projeto, coloque me nos créditos, pois isso me incentiva a
criar novos tutoriais... Espero que tenham gostado!!
|
|
|
|
|